package handlers

import (
	"fmt"
	"os"
	"path/filepath"
	"restaurant-system/pkg/utils"
	"time"

	"github.com/gin-gonic/gin"
)

// 处理图片上传
func UploadImage(c *gin.Context) {
	// 获取上传的文件
	file, err := c.FormFile("file")
	if err != nil {
		fmt.Printf("获取文件失败: %v\n", err)
		c.JSON(400, gin.H{"error": "获取上传文件失败"})
		return
	}

	// 检查文件类型
	ext := filepath.Ext(file.Filename)
	fmt.Printf("文件扩展名: %s\n", ext)
	if ext != ".jpg" && ext != ".jpeg" && ext != ".png" && ext != ".gif" {
		c.JSON(400, gin.H{"error": "只支持jpg、jpeg、png、gif格式的图片"})
		return
	}

	// 生成新的文件名
	filename := fmt.Sprintf("%d_%s%s", time.Now().Unix(), utils.RandomString(8), ext)
	fmt.Printf("生成的文件名: %s\n", filename)

	// 确保上传目录存在
	uploadDir := "uploads/images"
	if err := os.MkdirAll(uploadDir, 0755); err != nil {
		fmt.Printf("创建目录失败: %v\n", err)
		c.JSON(500, gin.H{"error": "创建上传目录失败"})
		return
	}

	// 保存文件
	dst := filepath.Join(uploadDir, filename)
	fmt.Printf("保存路径: %s\n", dst)
	if err := c.SaveUploadedFile(file, dst); err != nil {
		fmt.Printf("保存文件失败: %v\n", err)
		c.JSON(500, gin.H{"error": "保存文件失败"})
		return
	}

	// 返回文件URL
	imageURL := fmt.Sprintf("/uploads/images/%s", filename)
	fmt.Printf("返回的URL: %s\n", imageURL)
	c.JSON(200, gin.H{
		"url":     imageURL,
		"message": "上传成功",
	})
}
